package com.minsf.rpc.server.tcp;

import com.minsf.rpc.HttpServer;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;

/**
 * @Description
 * @Author minify
 * @Date 2024/3/29 21:49
 * @Project sf-rpc
 */
public class VertxTcpServer implements HttpServer {

    @Override
    public void doStart(int port) {
        // 创建 vert.x 实例
        Vertx vertx = Vertx.vertx();

        // 创建 TCP 服务器
        NetServer server = vertx.createNetServer();

        // 处理请求
        /*server.connectHandler(socket -> {
            // 处理连接
            socket.handler(buffer -> {
                // 处理接收到的字节数组
                byte[] requestData = buffer.getBytes();
                System.out.println(new String(requestData));
                // 在这里进行自定义的字节数组处理逻辑，比如解析请求、调用服务、构造响应等
                byte[] responseData = handleRequest(requestData);
                // 发送响应(向连接到服务端的客户端发送数据)
                socket.write(Buffer.buffer(responseData));
            });
        });*/
        server.connectHandler(new TcpServerHandler());

        // 启动 TCP 服务器并监听指定端口
        server.listen(port, result -> {
           if (result.succeeded()) {
               System.out.println("TCP server started on port " + port);
           } else {
               System.err.println("Failed to start TCP server:" + result.cause());
           }
        });
    }

    private byte[] handleRequest(byte[] requestData) {
        // 在这里编写处理请求的逻辑，根据 requestData 构造响应数据并返回
        // 这里只是一个示例，实际逻辑需要根据具体的业务需求来实现
        return "hello, client".getBytes();
    }

    public static void main(String[] args) {
        new VertxTcpServer().doStart(8888);
    }
}
